package cn.akwangl.design.pattern.behavioral.observerpattern.v1;

import java.util.ArrayList;
import java.util.List;

/**
 * 它把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者。
 * 抽象主题提供一个接口,可以增加和删除观察者对象。
 *
 * @author youyongkun
 * @date 2021/12/6 15:20
 */
public abstract class Subject {
    protected List<Observer> observers = new ArrayList<>(252);

    /**
     * 添加观察者.
     *
     * @param observer 观察者
     * @author youyongkun
     * @date 2021/12/6 15:22
     */
    public void add(Observer observer) {
        observers.add(observer);
    }

    /**
     * 删除观察者.
     *
     * @param observer 观察者
     * @author youyongkun
     * @date 2021/12/6 15:22
     */
    public void delete(Observer observer) {
        observers.remove(observer);
    }

    /**
     * 通知所有的订阅者.
     *
     * @author youyongkun
     * @date 2021/12/6 15:22
     */
    public abstract void notifyObserver();

}
